import toObject from '../toObject';

/**
 * 【同步方法】将数据转换为名称/值对编码字符串
 * @param data data 要转换的数据，要求为对象类型或json字符串类型
 * @param isEncodeURI 是否需要对转换后的value进行URL编码，默认：false
 * @return 转换后的编码字符串，如：name=abc&age=100
 */
function toQueryString(data, isEncodeURI = false) {
    
    // 初始化返回数据
    let data_return = '';
    
    // 将data参数转换为object数据类型
    let obj_data = toObject(data);
    // 如果转换成功，才执行
    if (obj_data) {
        // 初始化结果字符串
        let str_result = '';
        // 循环data参数
        for (let k in obj_data)
        {
            // 节点 - value值
            let ele_value = obj_data[k];
            // 如果子级为object
            if (typeof(ele_value)=="object")
            {
                // 将值转换为string
                try { ele_value = JSON.stringify(ele_value); }
                catch (e) {}
            }
            // 其它格式
            else { ele_value = ele_value.toString(); }
            // 如果需要对转换后的value进行URL编码
            if (isEncodeURI == true) { str_result += `${k}=${encodeURIComponent(ele_value)}&`; }
            else { str_result += `${k}=${ele_value}&`; }
        }
        // 去掉最后一个"&"符号
        if (str_result.length > 0) { str_result = str_result.substring(0, str_result.length-1); }
        // 返回的结果数据 赋值
        data_return = str_result;
    }
    
    // 返回结果数据
    return data_return;
}

export default toQueryString;